package cn.kgc.ffzw.myeat.commons;

/**
 * 设置的工具集合 可以存放 [[商品编号,购买数量],[商品编号,购买数量]]
 * [{商品编号:1,购买数量:5},{商品编号:2,购买数量:6}] [object，object，object。。。。。]
 * @author
 * @Des
 * @date 2019/11/20
 */
public class Collection {
    Object [] entries;
    int size=0;//数组中有几个数据
    public Collection(){
        this(10);
    }
    public Collection(int size){
        entries = new Object[size];
    }

    /**
     * 获取当前集合中元素的个数
     * @return
     */
    public int size(){
        return size;
    }
    /**
     * 清除所有数据
     */
    public void clear(){
        this.size=0;
        entries=new Object[10];
    }

    /**
     * 根据数组下标获取数据
     * @param pos
     * @return
     */
    public Object get(int pos){
        return entries[pos];
    }

    /**
     * 根据对象移除指定数据
     * @param target
     * @return
     */
    public Object remove(Object target){
        //找到对应的Entry
        Object obj=null;
        int pos = 0;
        for(int i=0;i<size;i++){
            if(entries[i]==target){
                pos = i;
                obj = entries[i];
                break;
            }
        }
        //利用copy方法取出数据
        System.arraycopy(entries,pos+1,entries,pos,size-pos-1);
        entries[size--]=null;
        return obj;
    }

    /**
     * 向数组集合中添加1条数据
     * @param obj 数据的对象
     */
    public void add(Object obj){
        //new Entry
        //Entry entry = new Entry(id, value);
        //检查容量 容量不足制造1个新的数组
        capacity(size+1);
        //再把对象存放到数组中
        entries[size++]=obj;
    }

    /**
     * 容量检查
     * @param newSize
     */
    private void capacity(int newSize){

        if(newSize>entries.length){
            //扩大1倍数据 使用位移运算符
            int ns = newSize << 1;
            //制造1个新的数组 并把老数据导入到新数组中
            Object [] ets = new Object[ns];
            System.arraycopy(entries,0,ets,0,size);
            //将制造出的新数组存放到entries中
            entries = ets;
        }
    }

}
